1. Field of the Invention
The invention is related to electronic circuit fabrication. More particularly, the invention is related to systems for designing and verifying the contents and layout of an integrated circuit.
2. Related Art
In Electronic Computer Aided Design (ECAD) software systems, an integrated circuit design specification and implementation data must be stored as a set of database records, and these records have some finite maximum size based on the virtual memory capacity of the computer on which the software is running. In addition, the execution time of the ECAD software normally increases with the size of the design. The data to represent a very large integrated circuit design may be too large to fit in a computer's memory, or the execution time required to design or simulate the entire design may be prohibitive. This is particularly true where the number of components (i.e. gates) and attendant connections within an integrated circuit are in the 10s or 100s of millions or more.
Hierarchical decomposition or “partitioning” is a technique which may be used to reduce the complexity of a large integrated circuit design specification so that the memory and/or execution time required to complete the design remains manageable. Instead of representing the design as a single flat database, the design is partitioned into pieces, often called “blocks”, which can be designed and verified independently. With a given single level of hierarchy, the design specification consists of a set of blocks and the top-level interconnections between those blocks. With multiple levels of hierarchy the blocks may themselves consist of smaller sub-blocks and their interconnections.
Hierarchical decomposition may also be used simply as an organizational tool by a design team as a method for partitioning a design project among several designers. However, this logical hierarchy created by the design team in the design specification does not need to be the same as the physical hierarchy used to partition the design for implementation. Often the logical hierarchy is much deeper than the physical hierarchy. A process of block flattening may be used to transform the logical hierarchy into an appropriate physical hierarchy.
A conventional hierarchical design project typically proceeds in two major steps: a top-down block planning step followed by a bottom-up verification step. If the blocks themselves are implemented during the top-down phase (i.e. each block is implemented before its children) the flow is referred to as a top-down flow. Conversely, if the blocks are implemented during the bottom-up phase (i.e. each block is implemented after all of its children have been completed) the flow is referred to as a bottom-up flow. The top-down and bottom-up flows each have their advantages and disadvantages. Without loss of generality, a top-down flow is used as an example in the remainder of this document. A bottom-up flow could be implemented using identical techniques.
FIG. 1 shows a typical top-down block planning and implementation flow. It begins with a partitioning of the design netlist to map the logical hierarchy into the physical hierarchy, defining the top-level block and the set of sub-blocks to be implemented (step 110). Each sub-block is then assigned a width and height value and a placement in the floorplan (step 115). Locations are then assigned to the pins on each sub-block, which represent the locations where nets cross the sub-block boundaries (step 120). This is followed by a time budgeting step that assigns signal arrival/required time constraints to each sub-block pin, indicating which portion of the clock cycle is allocated to the timing paths that cross the sub-block boundaries (step 135).
At this point in a top-down flow, after the top-level block has been planned, the process is prepared to implement the block. All leaf-cells (standard cells and macros) owned by the block are assigned a placement, and all nets owned by the block are routed (step 140). If any of the nets were routed over the sub-blocks (so-called “feedthrough nets”) these wires are pushed down into the sub-blocks that they overlap, and new pins are created on the sub-block where the wires cross the sub-block boundaries (step 145). Then, recursively implement the sub-blocks according to the same process (step 150). This involves recursively performing steps 110 to 170 while treating each sub-block as the top-level block.
For the above process to complete successfully the shapes, pin locations, and timing budgets assigned to each block (steps 115 through 135) must represent achievable constraints. Otherwise the system may not be able to complete the implementation of some blocks according to their specifications. In such a case the specifications may need to be refined and the top-down process may need to be repeated before a correct implementation can be realized. Such an iterative refinement is time-consuming and should be avoided. Thus, methods for achieving high-quality results in these steps are of critical importance.
When the recursive top-down planning and implementation step is complete the bottom-up verification process can commence. Proceeding from the lowest-level blocks toward the top-level, each block is independently analyzed for logical correctness, as well as its timing and electrical performance, and compared against its specification (step 155). After all sub-blocks of a block have been independently verified the block itself can be analyzed (step 170), under the assumption that the sub-blocks are correct.